package action.formula;

import java.util.List;

import org.apache.catalina.core.ApplicationContext;
import org.springframework.context.access.ContextBeanFactoryReference;

import vo.ChapterVO;
import vo.StairVO;

import dao.Chapter_dao;
import dao.Stair_F_dao;

import mybatis.service.FactoryService;

public class Stair_F_A {
	
	Stair_F_dao stair_dao = new Stair_F_dao();//만들어야 함 
	Chapter_dao chapter_dao = new Chapter_dao();
	private int mini_stair =0;//최초 생성되는 계단식 회차 
	public int chapterMax_stair(){
		
		return stair_dao.getChapterMax_stair();
		
	}
	
	public StairVO getAtChapter_stair(int index){//해당 단계의 stare 반환
		
		return stair_dao.getAtChapter_stair(index);
		
	}
	
	public boolean  make_stair(){
		
		int chapter_max =chapter_dao.getChapterCount();//
		int stair_max = chapterMax_stair();
		boolean suc = false;
		if(chapter_max>stair_max){
			
			if(stair_max<mini_stair){
				stair_max=mini_stair;// 생성단계 입력
			}
			int index=stair_max;//대상회차를 검증하기 위한 인덱스
			List<ChapterVO> chapter_arr =  chapter_dao.getFromChapterList(index);//stair_max 부터 대상회차 까지의 당첨 회차의 내용을 가져옴
			
			
			for(ChapterVO arr : chapter_arr){
				int chapter_index = arr.getChapter();
				if((chapter_index-1) == index){//만들어질  회차 chapter_index
					int[] temp_num = new int[7];
					temp_num[1]=arr.getNum1();
					temp_num[2]=arr.getNum2();
					temp_num[3]=arr.getNum3();
					temp_num[4]=arr.getNum4();
					temp_num[5]=arr.getNum5();
					temp_num[6]=arr.getNum6();
					System.out.println("index : "+index+"   "+"chapter_index : "+chapter_index);
					if(index>mini_stair){
						
						StairVO temp_arr  = getAtChapter_stair(chapter_index-1);//전 계단리스트를 가져옴 
						int temp_num45[] = new int[46];
							temp_num45[1]=temp_arr.getNum1();
							temp_num45[2]=temp_arr.getNum2();
							temp_num45[3]=temp_arr.getNum3();
							temp_num45[4]=temp_arr.getNum4();
							temp_num45[5]=temp_arr.getNum5();
							temp_num45[6]=temp_arr.getNum6();
							temp_num45[7]=temp_arr.getNum7();
							temp_num45[8]=temp_arr.getNum8();
							temp_num45[9]=temp_arr.getNum9();
							temp_num45[10]=temp_arr.getNum10();
							temp_num45[11]=temp_arr.getNum11();
							temp_num45[12]=temp_arr.getNum12();
							temp_num45[13]=temp_arr.getNum13();
							temp_num45[14]=temp_arr.getNum14();
							temp_num45[15]=temp_arr.getNum15();
							temp_num45[16]=temp_arr.getNum16();
							temp_num45[17]=temp_arr.getNum17();
							temp_num45[18]=temp_arr.getNum18();
							temp_num45[19]=temp_arr.getNum19();
							temp_num45[20]=temp_arr.getNum20();
							temp_num45[21]=temp_arr.getNum21();
							temp_num45[22]=temp_arr.getNum22();
							temp_num45[23]=temp_arr.getNum23();
							temp_num45[24]=temp_arr.getNum24();
							temp_num45[25]=temp_arr.getNum25();
							temp_num45[26]=temp_arr.getNum26();
							temp_num45[27]=temp_arr.getNum27();
							temp_num45[28]=temp_arr.getNum28();
							temp_num45[29]=temp_arr.getNum29();
							temp_num45[30]=temp_arr.getNum30();
							temp_num45[31]=temp_arr.getNum31();
							temp_num45[32]=temp_arr.getNum32();
							temp_num45[33]=temp_arr.getNum33();
							temp_num45[34]=temp_arr.getNum34();
							temp_num45[35]=temp_arr.getNum35();
							temp_num45[36]=temp_arr.getNum36();
							temp_num45[37]=temp_arr.getNum37();
							temp_num45[38]=temp_arr.getNum38();
							temp_num45[39]=temp_arr.getNum39();
							temp_num45[40]=temp_arr.getNum40();
							temp_num45[41]=temp_arr.getNum41();
							temp_num45[42]=temp_arr.getNum42();
							temp_num45[43]=temp_arr.getNum43();
							temp_num45[44]=temp_arr.getNum44();
							temp_num45[45]=temp_arr.getNum45();
						temp_num45=stair_range(temp_num, temp_num45);
						suc=set_stairDB(temp_num45,index+1,chapter_index);
					}else{
						//100가 기본 시작 회차이므로 stair 전회차를 1~45까지 초기화 해놓고 시작
						int temp_num45[] = new int[46];
						for(int i=1;i<46;i++){
							temp_num45[i]=i;
						}
						temp_num45=stair_range(temp_num,temp_num45);
						suc=set_stairDB(temp_num45,index+1,chapter_index);
					}
				}else{
					suc = false;
				}
				index++;
			}
		}
		return suc;
	}
	
	public int[] stair_range(int[] temp_num,int[] temp_num45){
		System.out.println("넘어온 배열 길이 : "+temp_num.length);
		for(int i=1;i<7;i++){
			for(int j=i;j<46;j++){
				if(temp_num[i]==temp_num45[j]){//대상 회차의 숫자와 전회차의 계단식중 같은 숫자가 있으면
					if(i!=j){//그 숫자가 같은 자리가 아니라면 
					  for(int k=j; k>i;k--){//전회차의 계단식중 맞는 index(j)부터 대상회차의 index(i)전 까지 감소 
						  temp_num45[k]=temp_num45[k-1];//대상회차의 index(i)전 까지 바로앞 index의 번호를 뒤로 밀기
					  }
					}
					temp_num45[i]=temp_num[i];//숫서대로 일테니 바로 전회차의 계단식에 대상회차의 번호 넣기	
					break;
				}
			}
		}
		return temp_num45;
	}
	private boolean set_stairDB(int[] temp_num45,int stair_chapter,int chapter){
		boolean succ=true;
		StairVO vo = new StairVO();
		vo.setChapter(stair_chapter);
		vo.setNum1(temp_num45[1]);
		vo.setNum2(temp_num45[2]);
		vo.setNum3(temp_num45[3]);
		vo.setNum4(temp_num45[4]);
		vo.setNum5(temp_num45[5]);
		vo.setNum6(temp_num45[6]);
		vo.setNum7(temp_num45[7]);
		vo.setNum8(temp_num45[8]);
		vo.setNum9(temp_num45[9]);
		vo.setNum10(temp_num45[10]);
		vo.setNum11(temp_num45[11]);
		vo.setNum12(temp_num45[12]);
		vo.setNum13(temp_num45[13]);
		vo.setNum14(temp_num45[14]);
		vo.setNum15(temp_num45[15]);
		vo.setNum16(temp_num45[16]);
		vo.setNum17(temp_num45[17]);
		vo.setNum18(temp_num45[18]);
		vo.setNum19(temp_num45[19]);
		vo.setNum20(temp_num45[20]);
		vo.setNum21(temp_num45[21]);
		vo.setNum22(temp_num45[22]);
		vo.setNum23(temp_num45[23]);
		vo.setNum24(temp_num45[24]);
		vo.setNum25(temp_num45[25]);
		vo.setNum26(temp_num45[26]);
		vo.setNum27(temp_num45[27]);
		vo.setNum28(temp_num45[28]);
		vo.setNum29(temp_num45[29]);
		vo.setNum30(temp_num45[30]);
		vo.setNum31(temp_num45[31]);
		vo.setNum32(temp_num45[32]);
		vo.setNum33(temp_num45[33]);
		vo.setNum34(temp_num45[34]);
		vo.setNum35(temp_num45[35]);
		vo.setNum36(temp_num45[36]);
		vo.setNum37(temp_num45[37]);
		vo.setNum38(temp_num45[38]);
		vo.setNum39(temp_num45[39]);
		vo.setNum40(temp_num45[40]);
		vo.setNum41(temp_num45[41]);
		vo.setNum42(temp_num45[42]);
		vo.setNum43(temp_num45[43]);
		vo.setNum44(temp_num45[44]);
		vo.setNum45(temp_num45[45]);
		vo.setWinnum_t_chapter(stair_chapter);
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(stair_dao.setAtStair(vo)!=0)
			succ = true;
		else
			succ = false;
		return succ;
	}
}


